#include<bits/stdc++.h>
#define fr first
#define sc second
#define pb push_back
using namespace std;const int N=5e5+7;typedef pair<int,int>pa;
int n,f[N],col,i,x,y,z,rt;vector<pa>g[N];vector<int>q;
void dfs1(int x,int fa=0){for(auto y:g[x])if(y.fr!=fa)f[1]+=(y.sc!=-1),dfs1(y.fr, x);}
void dfs2(int x,int fa=0){if(f[x]>f[rt])rt=x;for(auto y:g[x])if(y.fr!=fa)f[y.fr]=f[x]-y.sc,dfs2(y.fr,x);}
void dfs3(int x,int fa=0){
for(auto y:g[x])if(y.fr!=fa){
int c;if(y.sc==-1)printf("%d %d %d\n", y.fr, x, c=q.back()),q.pop_back();
else printf("%d %d %d\n",x,y.fr,++col),q.pb(col);
dfs3(y.fr,x);if(y.sc==-1)q.push_back(c);else q.pop_back();
}
}
int main(){
for(scanf("%d",&n),i=1;i<n;++i)scanf("%d%d%d",&x,&y,&z),g[x].pb(pa(y,z)),g[y].pb(pa(x,-z));
dfs1(1);dfs2(1);printf("%d\n",f[rt]);dfs3(rt);
}
1618C - Paint the Array | 469A - I Wanna Be the Guy |
1294A - Collecting Coins | 1227A - Math Problem |
349A - Cinema Line | 47A - Triangular numbers |
1516B - AGAGA XOOORRR | 1515A - Phoenix and Gold |
1515B - Phoenix and Puzzle | 155A - I_love_username |
49A - Sleuth | 1541A - Pretty Permutations |
1632C - Strange Test | 673A - Bear and Game |
276A - Lunch Rush | 1205A - Almost Equal |
1020B - Badge | 1353A - Most Unstable Array |
770A - New Password | 1646B - Quality vs Quantity |
80A - Panoramix's Prediction | 1354B - Ternary String |
122B - Lucky Substring | 266B - Queue at the School |
1490A - Dense Array | 1650B - DIV + MOD |
1549B - Gregor and the Pawn Game | 553A - Kyoya and Colored Balls |
1364A - XXXXX | 1499B - Binary Removals |